package com.ckr.controller;

import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import javax.annotation.Resource;
import java.util.List;
import java.util.Map;

/**
 * @author Shadowckr
 * @create 2022-01-15 14:55
 */

/*
JDBCTemplate
1、有了数据源(com.zaxxer.hikari.HikariDataSource)，然后可以拿到数据库连接(java.sql.Connection)，
有了连接，就可以使用原生的 JDBC 语句来操作数据库。
2、即使不使用第三方第数据库操作框架，如 MyBatis等，Spring 本身也对原生的JDBC 做了轻量级的封装，即JdbcTemplate。
3、数据库操作的所有 CRUD 方法都在 JdbcTemplate 中。
4、Spring Boot 不仅提供了默认的数据源，同时默认已经配置好了 JdbcTemplate 放在了容器中，程序员只需自己注入即可使用。
5、JdbcTemplate 的自动配置是依赖 org.springframework.boot.autoconfigure.jdbc 包下的 JdbcTemplateConfiguration 类。
 */

@RestController
@RequestMapping("/jdbc")
public class JdbcController {
    /*
      Spring Boot 默认提供了数据源，默认提供了 org.springframework.jdbc.core.JdbcTemplate
      JdbcTemplate 中会自己注入数据源，用于简化 JDBC操作
      还能避免一些常见的错误，使用起来也不用再自己来关闭数据库连接
     */

    @Resource
    JdbcTemplate jdbcTemplate;

    //查询user表中所有数据
    //List 中的1个 Map 对应数据库的 1行数据
    //Map 中的 key 对应数据库的字段名，value 对应数据库的字段值
    @GetMapping("/list")
    public List<Map<String, Object>> userList() {
        String sql = "select * from user";
//        List<Map<String, Object>> maps = jdbcTemplate.queryForList(sql);
//        return maps;
        return jdbcTemplate.queryForList(sql);
    }

    //新增一个用户
    @GetMapping("/add")
    public String addUser() {
        //插入语句，注意时间问题
        String sql = "insert into user(id, name, password) values (4, '艾可拉', '555555')";
        jdbcTemplate.update(sql);
        //查询
        return "addOk";
    }

    //修改用户信息
    @GetMapping("/update/{id}")
    public String updateUser(@PathVariable("id") int id) {
        //更新语句
        String sql = "update user set name=?, password=? where id=" + id;
        //数据
        Object[] objects = new Object[2];
        objects[0] = "奥西里斯";
        objects[1] = "777777";
        jdbcTemplate.update(sql, objects);
        //查询
        return "updateOk";
    }

    //删除用户
    @GetMapping("/delete/{id}")
    public String delUser(@PathVariable("id") int id) {
        //删除语句
        String sql = "delete from user where id=?";
        jdbcTemplate.update(sql, id);
        //查询
        return "deleteOk";
    }

}
